Properties এর Immutability এবং Value Protection

Computer Programming - পিএইচপি (PHP 8) - Readonly Properties (PHP 8.1+)
167

PHP 8.1-এ Properties এর Immutability এবং Value Protection

PHP 8.1-এ Properties এর Immutability এবং Value Protection এর ধারণাগুলি ক্লাস প্রপার্টি ম্যানেজমেন্টে নতুন দৃষ্টিভঙ্গি প্রদান করেছে। এই দুটি বৈশিষ্ট্য কোডের স্থিতিশীলতা এবং সুরক্ষাকে বাড়িয়ে দেয়, যেখানে অবজেক্টের প্রপার্টি একবার সেট হওয়ার পর পরিবর্তন করা যায় না (immutability) এবং প্রপার্টির মান সুরক্ষিত রাখা যায় (value protection)।

PHP 8.1-এ readonly properties এবং value protection সম্পর্কে বিস্তারিত জানানো হলো, যা কোডের সঠিকতা এবং নিরাপত্তা নিশ্চিত করে।

1. Immutability (Readonly Properties)

Immutability এর মানে হল যে একবার একটি প্রপার্টি সেট হয়ে গেলে, সেই প্রপার্টির মান আর পরিবর্তন করা যাবে না। PHP 8.1-এ readonly প্রপার্টি যোগ করা হয়েছে, যা একটি ক্লাসের প্রপার্টি একবার সেট করার পর তা আর পরিবর্তন করতে দেয় না। এটি ক্লাসের অবজেক্টের অবস্থা নিশ্চিত করে এবং কোডের জন্য একটি সুরক্ষিত পরিবেশ তৈরি করে।

Readonly Properties এর Syntax:

class User {
    public readonly string $name;

    public function __construct(string $name) {
        $this->name = $name;
    }
}

$user = new User("John Doe");
echo $user->name;  // Output: John Doe

$user->name = "Jane Doe";  // Error: Cannot modify readonly property

এখানে, $name প্রপার্টি readonly হিসেবে ডিক্লেয়ার করা হয়েছে, তাই একবার সেট হওয়ার পর এটি পরিবর্তন করা যাবে না। যদি আপনি $name পরিবর্তন করার চেষ্টা করেন, PHP একটি ত্রুটি (error) দেখাবে।

Readonly Properties এর সুবিধা:

  1. সুরক্ষা: একবার ইনিশিয়ালাইজ হওয়ার পর প্রপার্টির মান পরিবর্তন না হওয়ার মাধ্যমে কোডে বেশি সুরক্ষা নিশ্চিত করা যায়।
  2. ডেটার অবস্থা সুরক্ষিত রাখা: আপনার অবজেক্টের প্রপার্টি একবার সেট হয়ে গেলে, তা অন্য কোথাও পরিবর্তিত হবে না, যা অবজেক্টের স্থিতিশীলতা এবং সঠিকতা নিশ্চিত করে।

2. Value Protection (Encapsulation)

Value Protection হল একটি নকশা প্যাটার্ন, যেখানে অবজেক্টের প্রপার্টিগুলির মানকে সুরক্ষিত রাখতে encapsulation ব্যবহার করা হয়। এতে, ক্লাসের প্রপার্টি সরাসরি অ্যাক্সেসযোগ্য না হয়ে, সেটি শুধুমাত্র নির্দিষ্ট মেথডের মাধ্যমে অ্যাক্সেস বা পরিবর্তন করা যায়।

এটি PHP-তে ঐতিহ্যগতভাবে getter এবং setter মেথড ব্যবহার করে করা হয়। উদাহরণস্বরূপ:

Getter and Setter উদাহরণ:

class Product {
    private string $name;

    public function __construct(string $name) {
        $this->name = $name;
    }

    public function getName(): string {
        return $this->name;
    }

    public function setName(string $name): void {
        if ($name === "invalid") {
            throw new Exception("Invalid name");
        }
        $this->name = $name;
    }
}

$product = new Product("Laptop");
echo $product->getName();  // Output: Laptop

$product->setName("Phone");
echo $product->getName();  // Output: Phone

$product->setName("invalid");  // Error: Invalid name

এখানে, name প্রপার্টি private হিসেবে ডিফাইন করা হয়েছে, এবং আমরা getter এবং setter মেথডের মাধ্যমে প্রপার্টির মান অ্যাক্সেস এবং সেট করছি। setName() মেথডে একটি কাস্টম ভ্যালিডেশন যুক্ত করা হয়েছে, যা নির্দিষ্ট মান (যেমন "invalid") থেকে রক্ষা করে।

Value Protection-এর সুবিধা:

  1. ডেটা ভ্যালিডেশন: প্রপার্টি সেট করার সময় আপনি validation বা sanitization করতে পারেন, যাতে অবাঞ্ছিত বা অস্বাভাবিক মান সেট না হয়।
  2. Encapsulation: প্রপার্টির মান সরাসরি পরিবর্তন না হওয়ার মাধ্যমে কোডের নিরাপত্তা এবং সঠিকতা বজায় থাকে।
  3. Flexibility: প্রপার্টির মান সেট বা গেট করার জন্য আপনি মেথড যোগ করতে পারেন, যার মাধ্যমে আপনি অতিরিক্ত কার্যকরী কাস্টমাইজেশন করতে পারেন।

PHP 8.1 এ Readonly Properties এবং Value Protection এর তুলনা

বৈশিষ্ট্যReadonly PropertiesValue Protection (Encapsulation)
প্রপার্টি পরিবর্তনএকবার সেট হলে পরিবর্তন করা যায় না।প্রপার্টির মান নির্দিষ্ট মেথডের মাধ্যমে পরিবর্তন করা যায়।
কোডে সুরক্ষাপ্রপার্টি সুরক্ষিত থাকে, কোনো পরিবর্তন করা যায় না।getter/setter মেথডের মাধ্যমে মান পরিবর্তন এবং প্রপার্টি অ্যাক্সেস করা হয়।
ভ্যালিডেশনকোডে ভ্যালিডেশন নেই, শুধুমাত্র ইনিশিয়াল মান সেট করা হয়।setter মেথডে ভ্যালিডেশন বা স্যানিটাইজেশন করা যায়।
ইউজার কেসএকবার সেট করা হলে প্রপার্টি পরিবর্তন না করার জন্য উপযুক্ত।প্রপার্টির মানের নিয়ন্ত্রণ এবং ফ্লেক্সিবিলিটি প্রদান করে।
মেমরি এবং পারফরম্যান্সহালকা এবং কার্যকর, কোনো অতিরিক্ত মেথডের প্রয়োজন নেই।অতিরিক্ত getter/setter মেথড ব্যবহারের প্রয়োজন।

3. Immutability with Backed Enums (Example)

PHP 8.1-এ Enums এর সাথে immutability একত্রে ব্যবহার করা যায়, যেখানে readonly প্রপার্টি ব্যবহার করে Enum কেসের মান পরিবর্তন করা যাবে না।

enum Status: string {
    case Pending = 'pending';
    case Approved = 'approved';
    case Rejected = 'rejected';
}

class Order {
    public readonly Status $status;

    public function __construct(Status $status) {
        $this->status = $status;
    }
}

$order = new Order(Status::Pending);
echo $order->status->value;  // Output: pending

// $order->status = Status::Approved;  // Error: Cannot modify readonly property

এখানে, Status Enum এবং readonly প্রপার্টি ব্যবহার করা হয়েছে, যাতে status প্রপার্টির মান একবার সেট হওয়ার পর আর পরিবর্তন করা না যায়।


Conclusion

PHP 8.1-এ Immutability এবং Value Protection দুটি নতুন বৈশিষ্ট্য, যা প্রপার্টির মান সুরক্ষিত এবং অপরিবর্তনীয় রাখার জন্য ব্যবহৃত হয়। Readonly properties ক্লাসের প্রপার্টি একবার ইনিশিয়ালাইজ হওয়ার পর পরিবর্তন না করার সুবিধা দেয়, যা ডেটার সুরক্ষা নিশ্চিত করে। অন্যদিকে, Value Protection encapsulation-এর মাধ্যমে প্রপার্টির মানের নিয়ন্ত্রণ নিশ্চিত করে, যেখানে আপনি getter/setter মেথড ব্যবহার করে মান যাচাই এবং পরিবর্তন করতে পারেন। এই ফিচারগুলো কোডের সঠিকতা, নিরাপত্তা এবং রক্ষণাবেক্ষণ সহজ করে তোলে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...